/**
 * 验证变量类型
 * @author zhang gong
 * @date 2021-08-28
 */

class VariableVerify {
	
	constructor() {

	}
	
	/**
	 * 判断当前变量类型
	 * @param {Object} variable
	 * @return {Number} 1、数字 2、字符串 3、布尔值 4、数组 5、对象 6、函数 7、undefined 8、null 0、未知
	 */
	varType(variable) {
		const type = Object.prototype.toString.call(variable)
		let res = 0
		switch (type) {
			case '[object Number]':
				res = 1
				break;
			case '[object String]':
				res = 2
				break;
			case '[object Boolean]':
				res = 3
				break;
			case '[object Array]':
				res = 4
				break;
			case '[object Object]':
				res = 5
				break;
			case '[object Function]':
				res = 6
				break;
			case '[object Undefined]':
				res = 7
				break;
			case '[object Null]':
				res = 8
				break;
			default:
				res = 0
		}
		return res
	}
	
	
	/**
	 * 变量是非空数组
	 * @param {any} variable 变量
	 * @return {boolean}
	 */
	isArrayNonEmpty(variable) {
		return Array.isArray(variable) && variable.length > 0
	}
	
	/**
	 * 变量是对象，且必须有某个属性(非原型链继承属性)
	 * @param {any} variable 变量
	 * @param {string} attribute 属性名称
	 * @return {boolean}
	 */
	isObjectHasAttribute(variable, attribute) {
		return Object.prototype.toString.call(variable) === "[object Object]" && variable.hasOwnProperty(attribute)
	}
	
	/**
	 * 变量是非0数字
	 * @param {Object} variable 变量
	 * @return {boolean}
	 */
	isNumberNotZero(variable) {
		return typeof variable === 'number' && !isNaN(variable) && variable > 0
	}
	
	/**
	 * 判断变量是非空字符串
	 * @param {Object} variable 变量
	 * @return {boolean}
	 */
	isStringNotEmpty(variable) {
		return typeof variable === 'string' && variable.length > 0
	}
	
}


export default VariableVerify;